home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gamers Delight 2
/
Gamers Delight 2.iso
/
Aminet
/
game
/
misc
/
CRobots.lha
/
CRobots
/
tiger.r
< prev
next >
Wrap
Text File
|
1990-04-16
|
4KB
|
204 lines
Dark Unicorn
Conrad Wong
/* PROWLING TIGER
Tiger, Tiger, Burning Bright,
Stalking Through the Jungle Night,
What Mortal Hand or Eye
Dare Trace Thy Fearful Symmetry?
version 3.0 last revised November 4, 1988
Created July 21, 1988 by Conrad Wong
Copyrighted (C) 1988 Dark Unicorn Publishing */
int angle,
range,
look,
movex,
movey;
main()
{
int temp;
movex = 100;
movey = 900;
while (1) {
move(movex,movey);
temp = movex;
movex = movey;
movey = 1000 - temp;
}
}
/* Move: Tiger searches for prey by moving in a square inscribed in the
battlefield. He looks always in the direction he's heading and in a
constantly rotating direction. */
move (dest_x, dest_y)
int dest_x, dest_y;
{
int course,range;
course = plot_course(dest_x,dest_y);
while (distance(loc_x(),loc_y(),dest_x,dest_y) > 50)
{
drive (course,100);
if (range = scan(angle = course,10)) {
pounce();
course = plot_course(dest_x,dest_y);
}
if (range = scan(angle = (look -= 110),10)) {
pounce();
course = plot_course(dest_x,dest_y);
}
}
drive(course,0);
}
/* Pounce: when Tiger is charging, he uses the tracking subroutine to make
sure his gun is on target, then subtracts a bit from range because he's
moving so fast. If Tiger is close enough, he stops and uses the killprey
subroutine; if he loses sight of the prey, he's passed it and does a
quick scan. */
pounce()
{
int course;
course = angle;
while ((range = scan(angle = track(angle,10,0),10)) > 200) {
cannon(angle,range * 9 / 10);
drive (course,100);
}
if (range)
killprey();
spotprey();
}
/* Spot Prey: Tiger has lost the prey, but because it was pouncing, Tiger
thinks the prey is fairly close and uses a tracking subroutine to spot it.
Depending on the range, it will either pounce or killprey. */
spotprey()
{
int time;
drive (0,0);
time = 0;
while (!(range = scan(angle += 100,10)) && (time < 36)) {
time += 1;
}
if (range)
killprey();
}
/* Kill Prey: Tiger has spotted the prey in close and doesn't want to waste
time charging. Instead Tiger uses a lower resolution on the subroutine
to keep a good lock on the prey. Tiger also knows if he's been hit too
much staying where he is and flees. */
killprey()
{
int hit;
drive (0,0);
hit = damage() + 30;
cannon (angle,range);
while (range = scan(angle = track(angle,20,5),10)) {
cannon (angle,range);
if (!range) {
spotprey();
range = 0;
}
if (range > 200) {
pounce();
range = 0;
}
if (hit < damage()) {
flee();
range = 0;
}
}
}
/* Flee: if Tiger takes too much damage attacking the prey, it will flee by
running in a random direction. */
flee()
{
int x,y,course;
x = rand(1000);
y = rand(1000);
course = plot_course(x,y);
while (distance(loc_x(),loc_y(),x,y) > 50) {
drive (course,100);
range = scan (course,10);
if (range > 0)
cannon(course,range);
}
drive (0,0);
}
/* Track: pinpoints the enemy. */
track(d,r,l)
int d,r,l;
{
if (r > l)
{
if (scan(d-r,r) > 0)
return(track(d-r,r/2,l));
else
if (scan(d+r,r) > 0)
return(track(d+r,r/2,l));
else
if (scan(d,r) > 0)
return(track(d,r/2,l));
else
return (d);
}
else
return(d);
}
/* Distance: calculates distance between two points. */
distance(x1,y1,x2,y2)
int x1,y1,x2,y2;
{
return(sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2))));
}
/* Plot Course: calculates the degree heading of a location. */
plot_course(xx,yy)
int xx, yy;
{
int d,
x,y;
x = loc_x() - xx;
y = loc_y() - yy;
if (x == 0) {
if (y > 0)
d = 90;
else
d = 270;
}
else {
d = atan((100000 * y) / x);
if (x >= 0)
d += 180;
else if ((y > 0) && (x < 0))
d += 360;
}
return (d % 360);
}